From: Ian Campbell Date: Tue, 12 Apr 2011 12:45:59 +0000 (+0100) Subject: tools: hvmloader: refactor highbios and bios_info setup into struct bios_config X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=6b4d8dbd517abad67a25cd3caf702a484eb5d3c0;p=xen.git tools: hvmloader: refactor highbios and bios_info setup into struct bios_config Signed-off-by: Ian Campbell Acked-by: Keir Fraser --- diff --git a/tools/firmware/hvmloader/32bitbios_support.c b/tools/firmware/hvmloader/32bitbios_support.c index fa62ccb3ee..44e89fd636 100644 --- a/tools/firmware/hvmloader/32bitbios_support.c +++ b/tools/firmware/hvmloader/32bitbios_support.c @@ -144,7 +144,7 @@ static uint32_t relocate_32bitbios(char *elfarray, uint32_t elfarraysize) return (uint32_t)highbiosarea; } -uint32_t highbios_setup(void) +uint32_t rombios_highbios_setup(void) { return relocate_32bitbios((char *)highbios_array, sizeof(highbios_array)); } diff --git a/tools/firmware/hvmloader/config.h b/tools/firmware/hvmloader/config.h index a29e945779..3d0683414d 100644 --- a/tools/firmware/hvmloader/config.h +++ b/tools/firmware/hvmloader/config.h @@ -28,6 +28,9 @@ struct bios_config { void (*apic_setup)(void); void (*pci_setup)(void); void (*smp_setup)(void); + + uint32_t (*bios_high_setup)(void); + void (*bios_info_setup)(uint32_t); }; extern struct bios_config rombios_config; diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index 895321cc39..0426a42054 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -364,10 +364,10 @@ static const struct bios_config *detect_bios(void) int main(void) { + uint32_t highbios = 0; const struct bios_config *bios; int option_rom_sz = 0, vgabios_sz = 0, etherboot_sz = 0, smbios_sz = 0; - uint32_t etherboot_phys_addr, option_rom_phys_addr, bios32_addr; - struct bios_info *bios_info; + uint32_t etherboot_phys_addr, option_rom_phys_addr; printf("HVM Loader\n"); @@ -400,7 +400,9 @@ int main(void) printf("Loading %s ...\n", bios->name); memcpy((void *)bios->bios_address, bios->image, bios->image_size); - bios32_addr = highbios_setup(); + + if (bios->bios_high_setup) + highbios = bios->bios_high_setup(); if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) create_mp_tables(); @@ -480,17 +482,8 @@ int main(void) *E820_NR = build_e820_table(E820); dump_e820_table(E820, *E820_NR); - bios_info = (struct bios_info *)BIOS_INFO_PHYSICAL_ADDRESS; - memset(bios_info, 0, sizeof(*bios_info)); - bios_info->com1_present = uart_exists(0x3f8); - bios_info->com2_present = uart_exists(0x2f8); - bios_info->lpt1_present = lpt_exists(0x378); - bios_info->hpet_present = hpet_exists(ACPI_HPET_ADDRESS); - bios_info->pci_min = pci_mem_start; - bios_info->pci_len = pci_mem_end - pci_mem_start; - bios_info->madt_csum_addr = madt_csum_addr; - bios_info->madt_lapic0_addr = madt_lapic0_addr; - bios_info->bios32_entry = bios32_addr; + if (bios->bios_info_setup) + bios->bios_info_setup(highbios); xenbus_shutdown(); diff --git a/tools/firmware/hvmloader/rombios.c b/tools/firmware/hvmloader/rombios.c index 28c802a451..7d88425730 100644 --- a/tools/firmware/hvmloader/rombios.c +++ b/tools/firmware/hvmloader/rombios.c @@ -24,6 +24,7 @@ #include "../rombios/config.h" +#include "acpi/acpi2_0.h" #include "apic_regs.h" #include "pci_regs.h" #include "util.h" @@ -35,6 +36,23 @@ #define ROM_INCLUDE_ROMBIOS #include "roms.inc" +static void rombios_setup_bios_info(uint32_t bioshigh) +{ + struct bios_info *bios_info; + + bios_info = (struct bios_info *)BIOS_INFO_PHYSICAL_ADDRESS; + memset(bios_info, 0, sizeof(*bios_info)); + bios_info->com1_present = uart_exists(0x3f8); + bios_info->com2_present = uart_exists(0x2f8); + bios_info->lpt1_present = lpt_exists(0x378); + bios_info->hpet_present = hpet_exists(ACPI_HPET_ADDRESS); + bios_info->pci_min = pci_mem_start; + bios_info->pci_len = pci_mem_end - pci_mem_start; + bios_info->madt_csum_addr = madt_csum_addr; + bios_info->madt_lapic0_addr = madt_lapic0_addr; + bios_info->bios32_entry = bioshigh; +} + static void rombios_apic_setup(void) { /* Set the IOAPIC ID to the static value used in the MP/ACPI tables. */ @@ -280,6 +298,9 @@ struct bios_config rombios_config = { .apic_setup = rombios_apic_setup, .pci_setup = rombios_pci_setup, .smp_setup = smp_initialise, + + .bios_high_setup = rombios_highbios_setup, + .bios_info_setup = rombios_setup_bios_info, }; /* diff --git a/tools/firmware/hvmloader/util.h b/tools/firmware/hvmloader/util.h index f9e2519919..30828bb8a0 100644 --- a/tools/firmware/hvmloader/util.h +++ b/tools/firmware/hvmloader/util.h @@ -181,7 +181,7 @@ void xenbus_shutdown(void); char *xenstore_read(char *path); /* Prepare the 32bit BIOS */ -uint32_t highbios_setup(void); +uint32_t rombios_highbios_setup(void); /* Miscellaneous. */ void cacheattr_init(void);